<?php
class User_roles extends MY_Controller {

	public function __construct()
    {
    	# Al constructor le envío la clase Controlador, y el nombre de la entidad gestionada
    	parent::__construct(get_class($this), 'User_rol');

    	$this->title = 'Usuarios :: Roles';
		$this->CARPETA_VISTAS = 'usuarios/';
		$this->nombre_entidad = 'Rol';
		$this->nombre_entidad_plural = 'Roles';

		$this->pagina_ver = $this->CARPETA_VISTAS . 'rol_ver_todos_view';
		$this->pagina_editar = $this->CARPETA_VISTAS . 'rol_edit_view';
		$this->pagina_filtros_ver = $this->CARPETA_VISTAS . 'rol_filtros_ver_todos_view';

	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Crea un objeto de la entidad correspondiente y lo pobla con la información obtenida a 
	 * partir del formulario recibido a través de POST.	*/
	protected function getObjetoDesdeForm()
	{
		$idEntidad = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		
		$objEntidad = $this->getObjeto($idEntidad);
		$objEntidad->nombre = $this->input->post('txt_nombre');
		$objEntidad->es_admin = $this->input->post('chk_admin');
		$objEntidad->editable = TRUE; # Todos los roles nuevos agregados por el usuario serán editables	

		$datos['objEntidad'] = $objEntidad;
		$datos['objRelacionados'] = array();

		return $datos;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Carga en el arreglo que luego se pasarán a las vistas, los datos correspondientes a otras entidades que se
	 * necesiten. Por ejemplo, en este método deben cargarse las entidades a las que puede asociarse o relacionarse
	 * la entidad actual. Si no se requiriesen, no se agrega nada. */
	protected function cargarDatosRelacionados($dataView)
	{
		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función. 
	 * Obtiene el listado de elementos de acuerdo a los filtros que se hayan establecido y enviado a través
	 * del método POST. Devuelve un detalle de los filtros aplicados (o vacío si no hubiera filtros)	*/	
	protected function _aplicarFiltros($dataView = array())
	{
		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$obj_rol = $this->getObjeto();
		$detalle_filtros = '';

		$opc_tipo_rol = is_numeric($this->input->post('f_opt_esadmin')) ? $this->input->post('f_opt_esadmin') : -1;
		if($opc_tipo_rol != -1) { 
			$obj_rol->where('es_admin', $opc_tipo_rol); 
			$detalle_filtros .= $opc_tipo_rol == 1 ? 'Sólo Administradores' : 'Sólo No Administradores';
		}

		$dataView['objEntidad'] = $obj_rol;
		$dataView['detalle_filtros'] = $detalle_filtros;

		return $dataView;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda ELIMINARSE. */
	protected function validarEliminacion($id_elemento)
	{
		$obj_rol = $this->getObjeto($id_elemento);

		if($obj_rol->id != NULL && $obj_rol->editable) {
			// Valido si tiene elementos asociados.
			$obj_usuario = new User_usuario();
	        $obj_usuario->where('user_rol_id', $id_elemento);

	        $obj_form = new User_permiso();
	        $obj_form->where('user_rol_id', $id_elemento);

            if ($obj_usuario->count() == 0 && $obj_form->count() == 0) return TRUE;
            else return FALSE;
		}
		else return FALSE;
	}

	/* IMPORTANTE: DEBE existir esta función.
	 * Valida las condiciones que deben cumplirse para que un elemento pueda EDITARSE. */
	protected function validarEdicion($id_elemento)
	{
		$obj_rol = $this->getObjeto($id_elemento);

		if(($obj_rol->id != NULL && $obj_rol->editable) || $obj_rol->id == NULL) return TRUE;
		else return FALSE;
	}

	protected function setAyuda($dataView) {
		$dataView['descripcion_breve'] = 'Los Roles permiten agrupar usuarios de acuerdo al papel que cumplirán dentro del sistema (es una categorización de los mismos), y serán los elementos a los que se les asignarán los permisos de acceso al mismo.';
		$dataView['ayuda_borradoPosible'] = 'Sólo es posible borrar roles que no tengan ningún usuario ni permiso asociado.';

		return parent::setAyuda($dataView);
	}

	public function eliminar($id_elemento)
	{
		parent::eliminarEntidad($id_elemento);
	}

	public function generar_excel()
	{
		$dataView['entidad_plural'] = 'Roles';
		$dataView['datos_campos'] = array(array('field', 'nombre'),
											array('bool', 'es_admin'));

		$dataView['headers_datos'] = array('Rol', 'Administrador');

		parent::generar_excel($dataView);
	}
}